import java.util.HashSet;
import java.util.Set;

/*
345. 反转字符串中的元音字母
解题思路：双指针思想，首先使用一个set来保存所有的元音字母（包括大小写），然后对字符串进行一次遍历，分别从最左和最右边开始，条件为左边指针小于右边指针。
        当左边遇到第一个元音字母时，从右边开始，当右边也遇到且左指针还比右指针小时，交换两个字母。
 */

public class LeeCode345 {


  public String reverseVowels(String s) {


    int length = s.length();
    Set<Character> set = new HashSet<>();
    set.add('a');
    set.add('A');
    set.add('e');
    set.add('E');
    set.add('i');
    set.add('I');
    set.add('o');
    set.add('O');
    set.add('u');
    set.add('U');

    int left = 0;
    int right = length -1;
    char[] chars = s.toCharArray();

    while (left < right){
      char l = chars[left];
      char r = chars[right];

      if(!set.contains(l)){
        left++;
      };

      if (!set.contains(r)){
        right--;
      }

      if (set.contains(l) && set.contains(r)){
        char temp = l;
        chars[left] = r;
        chars[right] = temp;
        left++;
        right--;
      }

    }
    return String.valueOf(chars);
  }


  public static void main(String[] args) {

    System.out.println(new LeeCode345().reverseVowels(new String("qweqr")));
  }
}
